﻿#define   _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
/*举个例⼦：
写⼀个加法函数，完成2个整型变量的加法操作。//完成2个整形的相加，要传进来2个整形类型的值*/
//int Add(int a, int b)
//{
//	return a + b;//10 20
//}
//
//
//int main()
//{
//	int a = 0;
//	int b = 0;
//	scanf("%d %d", &a, &b);
//	int fufu = Add(a, b);
//	printf("%d", fufu);//30
//
//	return 0;
//}

//写一个数判断奇数还是偶数;如果n是奇数就返回1，如果n是偶数就返回0.
//(1)
//int fufu(int a)
//{
//	if (a % 2 == 1)
//	{
//		return 1;//return 可以返回数值，表达式
//	}
//	else
//	{
//		return 0;
//	}
//}
//int main()
//{
//	int a = 0;
//	scanf("%d", &a);
//	int b = fufu(a);
//	if (b == 1)
//		printf("奇数");
//	else
//		printf("偶数");
//	return 0;
//}

//写一个函数打印1-n的数字
//(2)
//void Add(int n)
//{
//	if (n < 1)
//	{
//		return;
//		
//	}
//     int i = 0;
//	for (i = 1; i <= n; i++)
//	{
//		printf("%d ",i);
//	}
//}
//
////int main()
////{
////	int m = 0;
////	scanf("%d", &m);
////	Add(m);
////	return 0;
////}

//这里是为了看ruturn能返回几个值
//int Add(int n)
//{
//	int i = 0;
//	int a = 0;
//	for (i = 0; i < n; i++)
//	{
//		return a = a + 1;//因为return 返回了一个值就不再执行
//	}
//}
//
//int main()
//{
//	int m = 0;
//	scanf("%d", &m);
//	int ret = Add(m);
//	printf("%d ", ret);//只打印1
//	return 0;
//}

//(3)
//函数前面是什么类型就返回什么类型
//int fufu(int c)//函数这里是int类型，会把return返回的值强行转换成int类型。
//{
//	return c;//要是这里c = 3.5 函数fufu是int类型；会把小数去掉返回3
//}
//
//int main()
//{
//	int c = 0;
//	scanf("%d", &c);
//
//	//创建一个op变量，接收函数fufu返回来的值。
//	int op = fufu(c);//函数调用
//	printf("%d", c);
//	return 0;
//}

//(4)
//int rest()
//{
//	int n = 0;
//	scanf("%d",&n);
//	if (n % 2 == 1)
//	{
//		return 1; //如果if为真就返回1;但是得考虑为假返回几。
//	}
//	else
//		return 0;
//}
//
//int main()
//{
//	int a = rest();
//	printf("%d\n", a);
//	return 0;
//}

//举例：函数参数3
//void test()//这里写void意思是明确告诉编译器我不许要参数，只要函数调用传参就报警告
//{
//	printf("hehe\n");
//}
//
//int main()
//{
//	test();//函数调用
//	test(1);//函数调用
//	test(100);//函数调用
//	test(100, 200);//函数调用
//	//test函数没有形参接收，但是实参依然可以传参，只不过没有变量接收它，你调用的时候可以传参
//	//但c语言这样写法不太合理，明明没有参数你还能给我传参，结果还对了，避免这种方式形参里面写void
//	return 0;
//}
//2种情况
//1.函数调用了4次所以打印hehe
//2.形参里面是void，函数调用里面有参数会报警告

//举例：函数的返回类型如果什么都不写，默认函数的返回类型是int
//test(void)//2.函数类型写void明确函数不需要返回，拿int a 接收返回值就报警高了
//{
//	printf("hehe\n");
//}
//
//int main()
//{
//	int a = test();
//	printf("%d\n", a);//1.打印5，是随机打印的 
//	return 0;
//}
//2种情况
//1.函数需要返回类型，你没写默认函数返回int类型，接收它返回来的值，打印是5，明明打印的字符，为啥是5，因为随机的。
//2.给函数类型类型写void，明确告诉编译器不需要返回类型，你创建变量去接收就会报警告。


//想把数组传给函数，就把数组作为函数参数
//比如：写一个函数将一个和整形的内容，全部设置为 - 1，再写一个函数打印数组的内容。
//通过题目知道自己要创建2个函数
//set_arr()用于将数组元素设置为-1
//print_arr()打印数组内容
void print_arr(int arr3[], int sz3)//设置这个函数的值，不用返回
{
	int a = 0;
	for (a = 0; a < sz3; a++)
	{
		printf("%d ", arr3[a]);//循环完了打印\n
	}
	printf("\n");

}




void set_arr(int arr2[], int sz2)//设置这个函数的值，不用返回
{
	int a = 0;
	for (a = 0; a < sz2; a++)
	{
		arr2[a] = -1;
	}
}


int main()
{
	int arr1[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	int sz1 = sizeof(arr1) / sizeof(arr1[0]);//传给形参的元素个数
	
	print_arr(arr1, sz1);//改之前，打印一次，改之后打印一次；这就是函数复用
	set_arr(arr1, sz1);//数组传参写的是数组名，不是arr[10]这是数组第11个元素
	print_arr(arr1, sz1);//打印数组所有内容
	return 0;
}

//练习
//假设 : 我们计算某年某月有多少天？如果要函数实现，可以以设计2个函数//计算某2020年2月有多少天
//
//	 闰年的判断
//	 1.能被4整除，并且不能被100整除
//	 2.或能被400整除

//	 int is_leap_year(int x)
//{
//		 if (x % 4 == 0 && x % 100 != 0 || x % 400 == 0)
//			 return 1;//如果为真返回1
//		 else
//			 return 0;//如果为假返回0
// }
//
//int get_days_of_month(int x, int y)//接收类型是整形，所以函数是整形，要返回一个值
//{
//	int days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };//创建一个每个月天数的数组
//	//              0   1   2   3   4   5   6   7   8   9  10  11
//	//2.因为下标是0开始的，要用下标对应月，所以下标-1
//	int day = days[y - 1];
//
//	//因为2月是特殊的要判断是不是闰年 - 29天
//
//	//3.在这个函数里面再嵌套一个函数，也相当于再创建一个函数去判断是不是闰年
//	if（is_leap_year(x) && y == 2)
//	{
//		day++;
//	}
//	return day;
//
//}
//
//int main()
//{
//	int year = 0;//年的变量
//	int month = 0;//月的变量
//	scanf("%d %d", &year, &month);//输入2020 2
//	//1.自定义一个函数，计算某年某月有多少天，用个变量接收
//	int d = get_days_of_month(year, month);
//	printf("%d\n", d);
//
//	return 0;
//}

//研究这个链式访问，知道printf返回值是什么
//int main()
//{
//	printf("%d\n", printf("%d", printf("%d", 666)));//66631
//	printf("%d ", printf("%d ", printf("%d ", 666)));//666 4 2 
//		return 0;
//}
//1.printf返回值是字符总个数，就是在屏幕上打印的几个字符
//2.如果%d用空格隔开也会打印一个空白字符个数,\n不算

//假如写个假发功能的函数请用3个文件使用
//#include "Add.h"
//int main()
//{
//	int a = 10;
//	int b = 66;
//	int Add = fufu(a, b);
//	printf("%d\n", Add);
//	return 0;
//}